//
//  UserAccount.swift
//  MXWeiBo
//
//  Created by Apple on 16/2/26.
//  Copyright © 2016年 Applea. All rights reserved.
//

import UIKit
// 用户账户 key
private let MXWeiBoUserAccount = "cn.itcast.userAccount"
class UserAccount: NSObject {
  
//    用户账户单例,全局入口
    static let sharedUserAccount = UserAccount()
//    用户登录标记］
    var isLogin: Bool {
    
        return access_token != nil
    }
    
//    用户昵称
    var screen_name : String?
//    用户ID
    var uid : String?
//    用于调用 access_token ，接口获取授权后的 access_token
    var access_token : String?
//    用户头像地址（大图），180×180像素
    var avatar_large : String?
//    access_token的生命周期，单位是秒数，string
    var expires_in : NSTimeInterval = 0 {
        didSet {
//        计算过期日期
            expiresDate = NSDate(timeIntervalSinceNow: expires_in)
        }
    }
//    过期日期
    var expiresDate: NSDate?
    
//  MARK: -- 构造函数
//    如果在 init 增加 private 修饰符 ，可以限制外界通过 （） 直接创建对象
  private override init() {
        super.init()
        loadUserAccount()
    }
    
//    init(dict: [String:AnyObject]) {
//        super.init()
////        字典转模型
//        setValuesForKeysWithDictionary(dict)
//        
//    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    override var description: String {
//        模型转字典
        
       let keys = ["screen_name" , "uid" , "access_token" , "avatar_large" , "expires_in","expiresDate"]
        
        return dictionaryWithValuesForKeys(keys).description
       
    }
}
//    MARK:  --加载和保存用户账户
extension UserAccount {

    
//    使用字典更新 模型 数据
    func upDateUserAccount(dict: [String : AnyObject]) {
       setValuesForKeysWithDictionary(dict)
        saveUserAccount()
    }
//    将当前用户‘账户’保存在用户偏好
    private func saveUserAccount() {
//    1.模型转字典
        let keys = ["screen_name" , "uid" , "access_token" , "avatar_large" , "expires_in","expiresDate"]
       let dict = dictionaryWithValuesForKeys(keys)
    
//    2.将字典写入偏好设置
        NSUserDefaults.standardUserDefaults().setObject(dict, forKey: MXWeiBoUserAccount)
        
        print(NSHomeDirectory())
    }
//    加载用户账户
    private func loadUserAccount() {
    
//    1.从用户偏好设置加载（从磁盘加载）
        guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(MXWeiBoUserAccount) as? [String : AnyObject] else {
               return
        }
//      2.字典转模型
        setValuesForKeysWithDictionary(dict)
//      3.判断是否过期
        
        if isExpired {
            print("token  已经过期")
            access_token = nil
        } else
        {
          print("token 正常")
        }
        
    }
    
    private var isExpired: Bool {
        
        
        return expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedAscending
        
    }
}